package com.caiheng.api.service.wxuser;

import com.caiheng.api.entity.product.ProductOrder;
import com.caiheng.api.entity.wxuser.User;
import com.caiheng.api.exception.TransactionalException;
import com.caiheng.api.service.base.BaseService;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface UserService extends BaseService<User> {

    /**
     *   微信绑定手机号
     * @param phone
     * @param user
     * @return
     * @throws TransactionalException
     */
    int bandPhone(String phone, User user) throws TransactionalException;

    int unBandPhone(String phone, User user) throws TransactionalException;

    List<User> selectByShopId(Integer shop_id, Integer user_id, Integer offset, Integer pageSize, Date begin_time, Date end_time);

    /**
     *  新用户注册
     * @param openId
     * @param unionId
     * @param sessionKey
     * @param token
     * @param ag_id
     * @param platform
     * @param promoter_id
     * @param lng
     * @param lat
     * @param from_type  为了记录注册的来源  抽奖可以多添加一次抽奖机会
     * @return
     * @throws TransactionalException
     */
    User register(String openId,String unionId,String sessionKey,String token,Integer ag_id,
                  String platform,int promoter_id,double lng,double lat,String from_type) throws TransactionalException;


    int updateLogin(User user)throws TransactionalException;


    int reloadUserMp(String nextOpenId);

    /**
     *
     * @param user
     * @param order  订单
     * @param integral  积分数
     * @param in_or_out  增加积分  还是 减少积分  0 - 减少  1 - 加
     * @param getType  积分的获取类型   1 - 购买商品、商家服务获取  2 -- 缴纳物业费使用  3 - 鸡蛋兑换跃豆
     * @param remark 备注信息
     * @return
     */
    int updateIntegral(User user, ProductOrder order, double integral, int in_or_out,int getType, String remark);


    /**
     * @description 经纬度转换省市区
     * @param user
     * @date 2022/5/12 11:21
     **/
    User getLocationInfo(User user);


    /**
     *  判断当前定位是否和之前的定位一样
     * @param user
     * @return
     */
    Map<String,Object> validateLocation(User user);

}
